package com.optional;
/**
 *
 **/

import java.util.Optional;
import java.util.OptionalDouble;

/**
 * @Author weiwei
 * @Date 2021-03-03 11:44
 * @description optional
 **/
public class OptionalTest {

    @SuppressWarnings("all")
    public static void main(String[] args) {
        Optional<Object> empty = Optional.empty();
        System.out.println(empty.orElse("1"));
        //通过get方法获取Optional中的实际值 值为空抛异常
        System.out.println(Optional.of(1).get());
        //通过ofNullable来初始化一个null，通过orElse方法实现Optional中无数据的时候返回一个默认值 ofNullable 值为空返回空的optional
        System.out.println(Optional.ofNullable(null).orElse("A"));
        //OptionalDouble是基本类型double的Optional对象，isPresent判断有无数据
        System.out.println(OptionalDouble.empty().isPresent());
        //通过map方法可以对Optional对象进行级联转换，不会出现空指针，转换后还是一个Optional  有值才执行
        System.out.println(Optional.of(1).map(Math::incrementExact).get());
        //通过filter实现Optional中数据的过滤，得到一个Optional，然后级联使用orElse提供默认值  filter方法 不匹配或者无值返回空的optional
        System.out.println(Optional.of(1).filter(integer -> integer % 2 == 0).orElse(null));
        //通过orElseThrow实现无数据时抛出异常
        System.out.println(Optional.empty().orElseThrow(IllegalArgumentException::new));

    }


}
